//318 Maximum Product of Word Lengths
/*
给定多个字母串，求其中任意两个字母串的长度乘积的最大值，且这两个字母串不能含有相
同字母

输入输出样例：
	输入一个包含多个字母串的一维数组，输出一个整数，表示长度乘积的最大值

Input: ["a","ab","abc","d","cd","bcd","abcd"]
Output: 4
	
*/
int maxProduct(vector<string>& words) {
	unordered_map<int, int> hash;
	int ans = 0;
	for (const string & word : words) {
		int mask = 0, size = word.size();
		for (const char & c : word) {
			mask |= 1 << (c - ’a’);
		}
		hash[mask] = max(hash[mask], size);
		for (const auto&[h_mask, h_len] : hash) {
			if (!(mask & h_mask)) {
				ans = max(ans, size * h_len);
			}
		}
	}
	return ans;
}